package com.gjzt.business.media.service;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.eastdigit.system.model.BusinessException;
import com.eastdigit.system.service.BaseService;
import com.eastdigit.util.StringUtil;
import com.gjzt.business.media.inter.MediaFileMapper;
import com.gjzt.business.media.model.MediaFile;
import com.gjzt.business.utils.Constant;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

@Service
public class MediaFileService extends BaseService {

	@Autowired
	private MediaFileMapper mediaFileMapper;

	/**
	 * 根据来源类型、来源数据id查询记录对应的图片信息
	 * 
	 * @param sourceType 来源类型
	 * @param sourceDataId 来源数据id 
	 * @param status 0：失效 1：有效
	 * @return List<MediaFile>
	 */
	public List<MediaFile> findMediaFileBySourceTypeAndDataId(String sourceType, String sourceDataId, String status) {
		if(StringUtil.isEmpty(status)){
			status = Constant.DATA_STATUS_TRUE;
		}
		return mediaFileMapper.findMediaFileBySourceTypeAndDataId(sourceType, sourceDataId, status);
	}
	
	/**
	 * 根据来源类型、来源数据id查询记录对应的图片信息
	 * 
	 * @param sourceType 来源类型
	 * @param sourceDataId 来源数据id 
	 * @param status 0：失效 1：有效
	 * @return JSONArray [{"name":xx,"path":xx}]
	 */
	public JSONArray getMediaFileArrayBySourceTypeAndDataId(String sourcetype, String sourceDataId, String status) {
		if(StringUtil.isEmpty(status)){
			status = Constant.DATA_STATUS_TRUE;
		}
		JSONArray fileArray = new JSONArray();
		List<MediaFile> files = findMediaFileBySourceTypeAndDataId(sourcetype, sourceDataId, status);
		for (int j = 0; j < files.size(); j++) {
			MediaFile file = files.get(j);
			JSONObject o = new JSONObject();
			o.put(Constant.MEDIAFILE_FILE_NAME, file.getName());
			o.put(Constant.MEDIAFILE_FILE_PATH, file.getPath());
			fileArray.add(o);
		}
		return fileArray;
	}

	/**
	 * 新增图片信息
	 * 
	 * @param dataJson 
	 * dataJson格式：{"sourceType":xx,"sourceDataId":xx,"files":[{"path":xx,"name":xx}]}
	 * 
	 */
	public void addMediaFile(JSONObject dataJson) {
		String sourceType = "";
		String sourceDataId = "";
		JSONArray files = new JSONArray();
		try {
			sourceType = dataJson.getString("sourceType");
			if (StringUtils.isBlank(sourceType)) {
				throw new BusinessException("来源类型不能为空!");
			}
			sourceDataId = dataJson.getString("sourceDataId");
			if (StringUtils.isBlank(sourceDataId)) {
				throw new BusinessException("来源数据ID不能为空!");
			}
			files = dataJson.optJSONArray("files");
			if (files != null && files.size() > 0) {
			} else {
				throw new BusinessException("上传文件不能为空!");
			}
		} catch (Exception e) {
			 throw new BusinessException(e.getMessage());
		}
		
		// 将某一来源数据全部文件记录删除（逻辑删除）
		//deleteMediaFileBySourceTypeAndDataId(sourceType, sourceDataId);
		
		// 插入新数据
		for (int j = 0; j < files.size(); j++) {
			JSONObject file = files.getJSONObject(j);
			String path = file.getString(Constant.MEDIAFILE_FILE_PATH);
			String name = file.getString(Constant.MEDIAFILE_FILE_NAME);
			MediaFile mediaFile = new MediaFile();
			mediaFile.setId(intIncrementId("MEDIA_FILE", "ID"));// 手动设置Id
			mediaFile.setSourceType(sourceType);
			mediaFile.setSourceDataId(sourceDataId);
			mediaFile.setPath(path);
			mediaFile.setName(name);
			mediaFile.setStatus(Constant.DATA_STATUS_TRUE);
			mediaFile.setCreateTime(new Date());
			mediaFileMapper.insert(mediaFile);
		}
	}

	/**
	 * 将某一条记录置删除（逻辑删除）
	 * 
	 * @param id 数据id
	 */
	public void deleteMediaFileById(String id) {
		MediaFile mediaFile = mediaFileMapper.selectByPrimaryKey(id);
		mediaFile.setStatus(Constant.DATA_STATUS_FALSE);
		mediaFileMapper.updateByPrimaryKey(mediaFile);
	}

	/**
	 * 将某一来源数据全部文件记录删除（逻辑删除）
	 * @param sourceType 来源类型
	 * @param sourceDataId 来源数据id 
	 */
	public void deleteMediaFileBySourceTypeAndDataId(String sourceType,String sourceDataId) {
		List<MediaFile> mediaFileList = findMediaFileBySourceTypeAndDataId(sourceType, sourceDataId, Constant.DATA_STATUS_TRUE);
		for (int i = 0; i < mediaFileList.size(); i++) {
			MediaFile mediaFile = mediaFileList.get(i);
			mediaFile.setStatus(Constant.DATA_STATUS_FALSE);
			mediaFileMapper.updateByPrimaryKey(mediaFile);
		}
	}
	
	//通过文件路径获取文件名
	public String getMediaFileNameByFilePath(String path) {
		MediaFile mediaFile = mediaFileMapper.selectByFilePath(path);
		if(mediaFile == null){
			throw new BusinessException("文件信息获取失败!");
		}
		return mediaFile.getName();
	}
	
	
	/**
	 * 获得插入数据json
	 * 
	 * @param sourceType
	 * @param sourceDataId
	 * @param filesArray
	 * @return
	 */
	public JSONObject getDataJson(String sourceType, String sourceDataId, JSONArray filesArray) {
		JSONObject dataJson = new JSONObject();
		JSONArray files = new JSONArray();
		for (int i = 0; i < filesArray.size(); i++) {
			JSONObject json = filesArray.getJSONObject(i);
			JSONObject file = new JSONObject();
			file.put(Constant.MEDIAFILE_FILE_PATH, json.getString(Constant.MEDIAFILE_FILE_PATH));
			file.put(Constant.MEDIAFILE_FILE_NAME, json.getString(Constant.MEDIAFILE_FILE_NAME));
			files.add(file);
		}
		dataJson.put(Constant.MEDIAFILE_SOURCE_TYPE, sourceType);
		dataJson.put(Constant.MEDIAFILE_SOURCE_DATA_ID, sourceDataId);
		dataJson.put(Constant.MEDIAFILE_FILES, files);
		return dataJson;
	}
}